﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BE;
using DAL;
using BE.SearchCriteria;
using BLL.Exceptions;
using System.Net.Mail;

namespace BLL
{
    public class DevolucionBLL : BaseBLL
    {
        public static void InsertarDevolucion(DevolucionBE pDevolucionBE)
        {
            try
            {
            DevolucionesDAL oDevolucionesDAL = new DevolucionesDAL();
            oDevolucionesDAL.InsertarDevolucion(pDevolucionBE);

            // cuando se carga una devolucion se notifica al lider de zona via Email

            VendedorBE oVendedorBE = new VendedorBE();
            oVendedorBE.IdVendedor = pDevolucionBE.Vendedor.IdVendedor;
            oVendedorBE = VendedorBLL.SeleccionarPorId(oVendedorBE);

            if (oVendedorBE != null)
            {

                // obtengo los datos de la gerente de zona
                VendedorBE oVendedorGteZonal = new VendedorBE();
                oVendedorGteZonal.IdVendedor = oVendedorBE.oAreaBE.oZonaBE.IdVendedorGteZonal;

                if (oVendedorGteZonal != null)
                {
                    oVendedorGteZonal = VendedorBLL.SeleccionarPorId(oVendedorGteZonal);

                    SendEmail("Aviso de devolución", oVendedorGteZonal.Email, pDevolucionBE);
                }
            }
            }
            catch (Exception ex)
            {
                if (!HandleException(ex))
                    throw;
            }
        }

        public static void UpdateDevolucion(DevolucionBE pDevolucionBE)
        {
            DevolucionesDAL oDevolucionesDAL = new DevolucionesDAL();
            oDevolucionesDAL.UpdateDevolucion(pDevolucionBE);
        }

        public static void DeleteByIdDevolucion(int pIdDevolucion)
        {
            try
            {
                DevolucionesDAL oDevolucionesDAL = new DevolucionesDAL();
                oDevolucionesDAL.DeleteByIdDevolucion(pIdDevolucion);
            }
            catch (Exception ex)
            {
                if (!HandleException(ex))
                    throw;
            }

        }

        public static DevolucionBE SeleccionarPorId(DevolucionBE pDevolucionBE)
        {
            DevolucionesDAL oDevolucionesDAL = new DevolucionesDAL();
           return  oDevolucionesDAL.SeleccionarPorId(pDevolucionBE);
        }

        public static List<DevolucionBE> SeleccionarPorParametros(BaseSC pFiltroSC, int pPageSize, int? pPageNum, ref int pCountReg)
        {
            DevolucionesDAL oDevolucionesDAL = new DevolucionesDAL();
            return oDevolucionesDAL.SeleccionarPorParametros(pFiltroSC, pPageSize, pPageNum, ref pCountReg);   
        }


        //prueba envio mail
        #region "Envio Email"
        public static  void SendEmail(String pszAsunto,
                            String pszTo, DevolucionBE pDevolucionBE)
         {

            try
            {
                MailMessage message = new MailMessage();
                message.From = new MailAddress(ConfiguracionMail.Constantes.MAIL_CASILLA_FROM);
                message.To.Add(new MailAddress(pszTo));
                message.Subject = pszAsunto;
                message.Body = ArmarEmail(pDevolucionBE.Articulo.Descripcion,pDevolucionBE.Vendedor.Nombre);
                message.IsBodyHtml = true;
                message.Priority = MailPriority.High;
                

                // utiliza los valores establecidos en el web.config 
                SmtpClient client = new SmtpClient();
                client.EnableSsl = true;
                client.Credentials = new System.Net.NetworkCredential(message.From.ToString(), ConfiguracionMail.Constantes.MAIL_CONTRASEÑA);
                client.Send(message);

            }
            catch (Exception)
            {
                throw new BLLException("No se ha podido notificar al supervisor correctamente. Por favor intente nuevamente.");
            }
        }


        public static String ArmarEmail(String pArticulo, String pVendedor)
        {
           StringBuilder wMessage   = new StringBuilder();

           wMessage.Append("<html><head><meta http-equiv='Content-Language' content='es-ar'/><meta http-equiv='Content-Type' content='text/html; charset=windows-1252'/><title>Devoluci&oacute;n</title>");
            wMessage.Append("<style type='text/css'>BODY { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 10pt; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; FONT-FAMILY: Tahoma, Arial }</style></head>");
            wMessage.Append("<style type='text/css'>.TDLabel {font-weight:bold; }</style></head>");
            wMessage.Append("<body><form id='form1' runat='server'><div>");
            wMessage.Append("<div><p style='font-family:Tahoma;color:#FF0000;'><strong> Mail de Aviso: </strong></p><hr />");
            wMessage.Append(string.Format( "Se ha ingresado una devolucion del art&iacute;culo {0} por la vendedora {1} el d&iacute;a {2}",pArticulo ,pVendedor, DateTime.Now.ToString() ));
            wMessage.Append("</div></form></body></html>");
           return wMessage.ToString();
        }

        #endregion 

        
                  
                 
                 
                  
					
                  

    }
}
